package com.cty.param;

import com.cty.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

@RequestMapping("param")
@Controller
public class DataController {

    /*
    * 直接传递参数
    * 要求:传递的参数名必须和形参名相同
    * 参数可传递也可不传递
    * */
    @RequestMapping("data")
    @ResponseBody
    public String data(String name,int age) {
        return "name = " + name + "age = " + age;
    }


    /*指定参数的请求名字，是否必须传入和默认值
    * @RequestParam(value = "account"指定请求参数名，required = true
    *   是否必须填写该参数 默认为true defaultValue = "1"
    *   默认值，当该参数不是必须填写的参数时，给一个默认值
    * */
    @GetMapping("data1")
    @ResponseBody
    public String data1(@RequestParam(value = "account") String username, @RequestParam(required = false,defaultValue = "1") int age) {
        return "name = " + username + "age = " + age;
    }

    /*当传入多个参数同名时
    * 用List来接收多个参数
    * 注意:形参List前必须加上@RequestParam
    * 要不然报错匹配不上
    * */
    @GetMapping("data2")
    @ResponseBody
    public String data2(@RequestParam List<String> hbs) {
        System.out.println(hbs);
        return hbs.size() + "";
    }

    /*传入的参数如何映射到实体对象中
    *  注意：直接传入参数就行
    *   请求参数名与实体对象属性名相等时自动映射
    *   如果请求参数名与属性名匹配不上将无法映射
    * */
    @GetMapping("data3")
    @ResponseBody
    public String data3(User user) {
        return user.toString();
    }
}
